//! https://leetcode-cn.com/problems/monotone-increasing-digits/
//! 738. 单调递增的数字
//! 给定一个非负整数 N，找出小于或等于 N 的最大的整数，
//! 同时这个整数需要满足其各个位数上的数字是单调递增。
//!（当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时，我们称这个整数是单调递增的。）

pub struct Solution {}

#[allow(dead_code)]
impl Solution {
    pub fn monotone_increasing_digits(n: i32) -> i32 {
        let mut ones = 111111111;
        let mut result = 0;
        for _ in 0..9 {
            while result + ones > n {
                ones /= 10;
            }
            result += ones;
        }
        result
    }

    fn is_increasing_digits(n: i32) -> bool {
        Self::get_digits_vec(n).windows(2).all(|vec| match vec {
            [a, b] => a >= b,
            _ => false,
        })
    }

    fn get_digits_vec(n: i32) -> Vec<i32> {
        let mut rest = n;
        let mut res = Vec::new();
        while rest != 0 {
            let div = rest / 10;
            res.push(rest - 10 * div);
            rest = rest / 10;
        }

        res
    }
}

#[cfg(test)]
mod test {
    use super::*;
    #[test]
    fn test_get_digits_vec() {
        assert_eq!(Solution::get_digits_vec(1234), vec![4, 3, 2, 1]);
    }

    #[test]
    fn test() {
        assert!(Solution::is_increasing_digits(1234567));
        assert!(Solution::is_increasing_digits(12344567));
        assert!(!Solution::is_increasing_digits(12434567));
    }
}
